{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 传统的OPC 访问规范\n",
    "\n",
    "要想查看实时数据、历史数据、报警等需要从不同的OPC服务器中获取，没有统一的规范，通信不方便。\n",
    "\n",
    "- OPC 实时数据访问规范（OPC DA）定义了包括数据值，更新时间与数据品质信息的相关标准。  \n",
    "- OPC 历史数据访问规范（OPC HDA）定义了查询、分析历史数据和含有时标的数据的方法。  \n",
    "- OPC 报警事件访问规范（OPC AE）定义了报警与时间类型的消息类信息，以及状态变化管理等相关标准。\n",
    "\n",
    "## 什么是OPC UA\n",
    "\n",
    "**OPC UA（OPC Unified Architecture）是指OPC统一体系架构，**是一种基于服务的、跨越平台的解决方案。\n",
    "\n",
    "**OPC UA具有如下特点：**\n",
    "\n",
    "1. **扩展了OPC的应用平台。**传统的基于COM/DCOM 的OPC技术只能基于Windows操作系统，OPC UA支持拓展到Linux和Unix平台。这使得基于OPC UA的标准产品可以更好地实现工厂级的数据采集和管理；\n",
    "\n",
    "2. **不再基于DCOM通讯**，不需要进行DCOM安全设置；\n",
    "\n",
    "3. OPC UA定义了统一数据和服务模型，使数据组织更为灵活，可以实现报警与事件、数据存取、历史数据存取、控制命令、复杂数据的交互通信；\n",
    "\n",
    "4. **OPC UA比OPC DA更安全。**OPC UA传递的数据是可以加密的，并对通信连接和数据本身都可以实现安全控制。新的安全模型保证了数据从原始设备到MES,ERP系统,从本地到远程的各级自动化和信息化系统的可靠传递；\n",
    "\n",
    "5. **OPC UA可以穿越防火墙**，实现Internet 通讯。\n",
    "\n",
    "## 为什么要开发 OPC UA\n",
    "  \n",
    "基于 COM/DCOM 的技术有着不可根除的缺点，因此随着技术的进步，以及数据交换各方面需求的提高，OPC 基金会在 2008 年发布了新的规范：OPC UA。\n",
    "\n",
    "## OPC UA 的技术特性\n",
    "  \n",
    "OPC UA 规范不再是基于 COM/DCOM 技术，因此 OPC UA 不仅能在 Windows 平台上实现，更可以在 Linux，以及其他的嵌入式平台中实现。\n",
    "\n",
    "与传统 OPC 规范相同，OPC UA 同样有着相同的设计目标：\n",
    "\n",
    "1. 功能等价：所有的基于 COM 的 OPC 规范中的功能，都映射到了 OPC UA 中。\n",
    "2. 多平台支持：支持从嵌入式的微控制器到基于云的分散式控制架构。\n",
    "3. 安全：信息加密，互访认证以及安全监听功能。\n",
    "4. 扩展性：不影响现有应用程序的情况下，就可以添加新的功能。\n",
    "5. 丰富的信息建模：可定义复杂的信息，而不再是单一的数据。\n",
    "\n",
    "### OPC UA 相对于传统 OPC 的变化\n",
    "\n",
    "#### 一、功能方面\n",
    "\n",
    "OPC UA 不仅支持传统 OPC 的所有功能，更支持更多新的功能：\n",
    "1. **网络发现**：自动查询本 PC 机中与当前网络中可用的 OPC Server。\n",
    "2. **地址空间优化**：所有的数据都可以分级结构定义，使得 OPC Client 不仅能够读取并利用简单数据，也能访问复杂的结构体。\n",
    "3. **互访认证**：所有的读写数据 / 消息行为，都必须有访问许可。\n",
    "4. **数据订阅**：针对 OPCClient 不同的配置与标准，提供数据 / 消息的监控，以及数值变化时的变化报告。\n",
    "5. **方案 (Methods) 功能**：OPC UA 中定义了通过在 OPCServer 中定义方案（Methods），来让 OPC client 执行特定的程序。\n",
    "\n",
    "#### 二、平台支持方面\n",
    "\n",
    "由于不再基于 COM/DCOM 技术，OPC UA 标准提供的更多的可支持的硬件或软件平台。硬件平台诸如传统的 PC 机、基于云的服务器、PLC、ARM 等其他微处理器；而软件平台可支持微软的 Windows、苹果公司的 OSX、安卓，以及其他的基于 Linux 的分布式操作系统。\n",
    "\n",
    "#### 三、安全性方面\n",
    "\n",
    "最大的变化是 OPC UA 可以通过任何单一端口（经管理员开放后）进行通信，这使得 OPC 通信不再会由于防火墙受到大量的限制。  \n",
    "\n",
    "## OPC UA 的技术细节概述\n",
    "  \n",
    "1. OPC UA 在传输中**可通过 XML 格式或者二进制格式来传输**，并且可选择并兼容更多通用的 IT 通信协议，比如 HTTPS。同时，在加密时，也能达到 128 或者 256 位的加密深度。在客户端与服务器的通信许可方面，OPC UA 使用了 OpenSSL 许可证来规定哪些应用程序或系统可以使用 OPC 与另一端相连接。\n",
    "2. 在建模方面，OPC UA 将建模的架构由 “数据建模” 扩展为了“信息建模”。OPC UA 规范中不仅仅提供了完整的面向对象的数据建模，同时也可定义复杂的多级结构体。数据类型或结构体都在配置文件（profiles）中定义，不仅可以定义已存在的传统 OPC 规范中的类型，还可以扩展加入其他的供应商或组织定义的新类型。\n",
    "\n",
    "---\n",
    "\n",
    "参考\n",
    "- [OPC协议解析-关于OPC协议的几个问题](https://www.cnblogs.com/meandme/p/10062410.html)\n",
    "- [OpenPCS 7站 - OPC UA](https://www.ad.siemens.com.cn/productportal/Prods/PCS7_TOP_V2/Communication/OPC/OpenPCS7_UA/OpenPCS7_UA.htm)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
